from django.http import HttpResponse
from django.shortcuts import render, redirect, reverse

from user.models import UserModel


# Create user views here.


def index(request):
    """ 首页 """
    # 获取Session值
    # 如果不存在则默认设置为0
    user_id = request.session.get('userid', 0)
    # 根据用户ID从数据库中查询用户对象，如果没有找到则返回None
    user = UserModel.objects.filter(id=user_id).first()
    # 渲染首页模板，并将用户对象传递给模板
    return render(request, 'index.html', {'user': user})



def register(request):
    """ 注册功能处理函数 """
    # 如果请求方法是GET，返回注册页面
    if request.method == 'GET':
        return render(request, 'register.html')
    # 如果请求方法是POST，处理用户提交的注册信息
    elif request.method == 'POST':
        try:
            # 从POST请求中获取用户名、密码和年龄
            uname = request.POST.get('uname')
            passwd = request.POST.get('passwd')
            age = request.POST.get('age')

            # 创建一个新的UserModel对象并保存到数据库
            UserModel.objects.create(
                username=uname,
                password=passwd,
                age=age
            )
            # 注册成功后重定向到登录页面
            return redirect(reverse('login'))
        except:
            # 如果发生异常，返回注册失败提示
            return HttpResponse('注册失败！')


def login(request):
    """ 登录功能实现 """

    # 如果请求方法是GET，返回登录页面
    if request.method == 'GET':
        return render(request, 'login.html')
    # 如果请求方法是POST，处理登录逻辑
    elif request.method == 'POST':

        # 从POST请求中获取用户名和密码
        uname = request.POST.get('uname')
        passwd = request.POST.get('passwd')

        # 查询数据库中是否存在匹配的用户名和密码的用户
        users = UserModel.objects.filter(username=uname, password=passwd)

        # 如果存在匹配的用户
        if users.exists():
            user = users.first()
            # 设置Session值
            request.session['userid'] = user.id  # 设置Session，把键值对存在Session里面
            request.session.set_expiry(7*24*3600)  # 设置Session过期时间为7天
            return redirect(reverse('index'))  # 重定向到首页
        else:
            # 如果不存在匹配的用户，返回错误信息
            return HttpResponse('账号密码错误！')


def logout(request):
    """ 注销 """
    # 删除Session值
    # request.session.delete('userid')
    # 另一种方式：
    # 获取当前会话的键值
    session_key = request.session.session_key
    # 删除当前会话键值对应的会话数据，实现注销功能
    request.session.delete(session_key)

    return redirect(reverse('index'))
